From 8e9a7a8c72a9fe407d296ec0ffeb56b2cd271959 Mon Sep 17 00:00:00 2001
From: Matt Weber <matthew.weber@rockwellcollins.com>
Date: Mon, 16 Sep 2019 22:00:29 -0500
Subject: [PATCH] Select TCP when lack of SYSV IPC

Update to add a configure test to build and install the TCP IPC version
when detecting SYSV IPC MsgQ support isn't available.

The issue was initially discovered on Windows Services for Linux
(WSL1.0). WSL does have some SysV IPC, but no message Q's, which is
required by fakeroot/faked by default.

Fixes:
https://github.com/Microsoft/WSL/issues/2465

Additional bug reports:
https://bugs.busybox.net/show_bug.cgi?id=11366

Upstream:
https://salsa.debian.org/clint/fakeroot/merge_requests/2

Signed-off-by: Jean-Francois Doyon <jfdoyon@gmail.com>
Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
---
 configure.ac | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/configure.ac b/configure.ac
index a9189e6..1650f77 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,6 +25,42 @@ AC_CACHE_CHECK([which IPC method to use],
 	       [ac_cv_use_ipc],
 	       [ac_cv_use_ipc=sysv])
 
+if test $ac_cv_use_ipc = "sysv"; then
+  AC_MSG_CHECKING([whether SysV IPC message queues are actually working on the host])
+
+  AC_LANG_PUSH(C)
+  AC_TRY_RUN([
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/msg.h>
+#include <time.h>
+#include <unistd.h>
+
+int main() {
+
+  srandom(time(NULL)+getpid()*33151);
+  key_t msg_key = random();
+  int msg_get = msgget(msg_key, IPC_CREAT|0600);
+
+  if (msg_get==-1) {
+    return 1;
+  } else {
+    msgctl(msg_get, IPC_RMID, NULL);
+    return 0;
+  }
+
+}], [ac_cv_use_ipc=sysv], [ac_cv_use_ipc=tcp])
+
+  if test $ac_cv_use_ipc = "tcp"; then
+    AC_MSG_RESULT([No, using TCP])
+  else
+    AC_MSG_RESULT([Yes])
+  fi
+
+  AC_LANG_POP(C)
+fi
+
 AC_ARG_WITH([dbformat],
 	    AS_HELP_STRING([--with-dbformat@<:@=DBFORMAT@:>@],
 			   [database format to use: either inode (default) or path]),
-- 
2.17.1

